iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 26
1
AI & Data

AI從入門到放棄系列 第 26

Day 26 ~ AI從入門到放棄 - 貓狗辨識之一

  • 分享至 

  • xImage
  •  

接下來四天是一個小單元,我們做一個簡單的小練習,要做一個可以辨識貓狗的模型,用於訓練的資料集是由Kaggle所提供,一個資料分析辨識的競賽平台,不過在Microsoft網站有提供下載,內有解析度不定的貓狗圖片各12500張,請下載然後解壓縮出來,跟你的ipynb檔案放在一起。

使用Colab的同學可以用下列指令下載並解壓縮。

!wget https://download.microsoft.com/download/3/E/1/3E1C3F21-ECDB-4869-8368-6DEBA77B919F/kagglecatsanddogs_3367a.zip

import zipfile

with zipfile.ZipFile('kagglecatsanddogs_3367a.zip', 'r') as zip:
  for i in zip.namelist():
    if i.startswith('PetImages'):
      zip.extract(i)

本來我們不應該自己手動篩選圖片,應該讓機器自己去挑選,但是這個資料比較少,只是做個練習,請從PetImages裡的Cat資料夾中刪除666.jpg、5673.jpg、Thumbs.db;Dog的部分為11702.jpg、Thumbs.db。

import os
catlist = ['666.jpg', '5673.jpg', 'Thumbs.db']
doglist = ['11702.jpg', 'Thumbs.db']
for i in catlist:
  os.remove('PetImages/Cat/' + i)
for i in doglist:
  os.remove('PetImages/Dog/' + i)

你可以更改路徑或是驗證集的比例。

img_directory = 'PetImages/'
validation_split = 0.1

使用下列程式碼將圖片隨機分到訓練集或驗證集,執行完之後你的路徑應該變成以下這樣。

PetImages/
    train/
        Cat/
            ***.jpg
            ***.jpg
            ...
        Dog/
            ***.jpg
            ***.jpg
            ...
    validation/
        Cat/
            ***.jpg
            ***.jpg
            ...
        Dog/
            ***.jpg
            ***.jpg
            ...
import os
import random

subclasses = os.listdir(img_directory)
for subclass in subclasses:
    os.makedirs(img_directory + 'train/' + subclass, exist_ok=True)
    os.makedirs(img_directory + 'validation/' + subclass, exist_ok=True)
    for img in os.listdir(img_directory + subclass):
        rand = random.choices(['train/', 'validation/'], [1-validation_split, validation_split])[0]
        os.rename(img_directory + subclass + '/' + img, img_directory + rand + subclass + '/' + img)
    os.rmdir(img_directory + subclass)

上一篇
Day 25 ~ AI從入門到放棄 - 遷移學習之四
下一篇
Day 27 ~ AI從入門到放棄 - 貓狗辨識之二
系列文
AI從入門到放棄30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言